/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package view;

import interfaces.Lager_VareInterface;
import interfaces.SalgInterface;
import interfaces.VareGruppeInterface;
import interfaces.VareInterface;
import interfaces.VareSalgInterface;
import java.awt.Dimension;
import java.awt.event.KeyEvent;
import java.rmi.RemoteException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import utility.PriceFormater;

/**
 *
 * @author Lunde
 */
public class VareBestillingsPanel extends javax.swing.JPanel {

    private KlientGUI main;
    private VareInterface aktivVare;
    private SalgInterface aktivSalg;
    private ArrayList<VarePanel1> grossistVarePaneler;

    public VareBestillingsPanel(KlientGUI main) {
        initComponents();
        this.main = main;
        grossistLagerpanel.setBounds(0, 0, 279, 484);
        grossistVarePaneler = new ArrayList<>();
      
    }

    public VareInterface getAktivVare() {
        return aktivVare;
    }

    public void opdaterDenneVare(VareInterface vare){
        for (int i = 0; i < grossistVarePaneler.size(); i++) {
            try {
                if(vare.getId() == grossistVarePaneler.get(i).getVareInterface().getId()){
                    grossistVarePaneler.get(i).setVareAgain(vare);
                }
            } catch (RemoteException ex) {
                JOptionPane.showMessageDialog(this, "Der er opstået en fejl på forbindelsen mod serveren", "Remote-Exception", 0);
            }
        }
    }
    private void initVarePanels() {
        grossistLagerpanel.removeAll();
        brugerLagerpanel.removeAll();
        vareTitel.setText("Ingen");
        avanceLabel.setText("Ingen");
        vareBeskrivelse.setText("");

        String valgtVaregruppe = (String) varegruppeCombo.getSelectedItem();
        try {
            ArrayList<VareInterface> grossistVarer = main.getConnectionInterface().getAlleVarer();
            int yPos = 2;
            System.out.println("Der er fundet " + grossistVarer.size() + " varer");
            for (int i = 0; i < grossistVarer.size(); i++) {
                boolean isAktiv = false;
                if (aktivVare != null) {
                    if (grossistVarer.get(i).getId() == aktivVare.getId()) {
                        isAktiv = true;
                    }
                }
                boolean medIValgtVaregruppe = false;
                if (valgtVaregruppe.equals("Ingen Varegruppe")) {
                    medIValgtVaregruppe = true;
                } else if (valgtVaregruppe.equals(grossistVarer.get(i).getVareGruppe().getGruppeNavn())) {
                    medIValgtVaregruppe = true;
                }
                boolean medISøgeord = false;
                if (jTextField1.getText().equals("Skriv dit søgeord her:")|| jTextField1.getText().equals("")) {
                    medISøgeord = true;
                } else if (grossistVarer.get(i).getTitel().toLowerCase().contains(jTextField1.getText().toLowerCase())) {
                    medISøgeord = true;
                }
                if (medIValgtVaregruppe && medISøgeord) {
                    VarePanel1 varePanel = new VarePanel1(grossistVarer.get(i), this, isAktiv);
                    grossistLagerpanel.add(varePanel);
                    varePanel.setSize(280, 40);
                    varePanel.setLocation(0, yPos);
                    varePanel.setVisible(true);
                    yPos = yPos + 42;
                }
            }
            grossistLagerpanel.setPreferredSize(new Dimension(grossistLagerpanel.getSize().width, yPos));

            //<editor-fold defaultstate="collapsed" desc="BrugersVarer">
            ArrayList<Lager_VareInterface> brugersVarer = main.getConnectionInterface().hentLagerVarerTilknyttetBruger();
            yPos = 2;
            for (int i = 0; i < brugersVarer.size(); i++) {
                boolean isAktiv = false;
                if (aktivVare != null) {
                    if (brugersVarer.get(i).getVare().getId() == aktivVare.getId()) {
                        isAktiv = true;
                        avanceLabel.setText(PriceFormater.formaterPrisTilString(brugersVarer.get(i).getSalgsPris() - aktivVare.getSalgsPris()) + " kr.");
                    }
                }
                boolean medIValgtVaregruppe = false;
                if (valgtVaregruppe.equals("Ingen Varegruppe")) {
                    medIValgtVaregruppe = true;
                } else if (valgtVaregruppe.equals(brugersVarer.get(i).getVare().getVareGruppe().getGruppeNavn())) {
                    medIValgtVaregruppe = true;
                }
                boolean medISøgeord = false;
                if (jTextField1.getText().equals("Skriv dit søgeord her:")|| jTextField1.getText().equals("")) {
                    medISøgeord = true;
                } else if (brugersVarer.get(i).getVare().getTitel().toLowerCase().contains(jTextField1.getText().toLowerCase())) {
                    medISøgeord = true;
                }
                if (medIValgtVaregruppe && medISøgeord) {
                    VarePanel1 varePanel = new VarePanel1(brugersVarer.get(i), this, isAktiv);
                    brugerLagerpanel.add(varePanel);
                    varePanel.setSize(280, 40);
                    varePanel.setLocation(0, yPos);
                    varePanel.setVisible(true);
                    yPos = yPos + 42;
                }
            }
            brugerLagerpanel.setPreferredSize(new Dimension(brugerLagerpanel.getSize().width, yPos));
//</editor-fold>

        } catch (RemoteException ex) {
            JOptionPane.showMessageDialog(this, "Der er opstået en fejl på forbindelsen", "Remote-Exception", 0);
        } catch (SQLException ex) {
            Logger.getLogger(VareBestillingsPanel.class.getName()).log(Level.SEVERE, null, ex);
        }
        brugerLagerpanel.revalidate();
        brugerLagerpanel.repaint();
        grossistLagerpanel.revalidate();
        grossistLagerpanel.repaint();
    }

//    private void getAktivSalgIfExists() {
//        try {
//            aktivSalg = main.getConnectionInterface().hentAktivtSalg();
//        } catch (RemoteException ex) {
//            JOptionPane.showMessageDialog(this, "Der er opstået en fejl på forbindelsen mod serveren\nda vi forsøgte at finde et aktivtsalg", "Remote-Exception", 0);
//        } catch (SQLException ex) {
//            JOptionPane.showMessageDialog(this, "Der er opstået en fejl på databasen\n//getAktivSalgIfExists" + ex.getLocalizedMessage(), "SQL-Exception", 0);
//        }
//    }
    public void setAktivVare(VareInterface vare) {
        aktivVare = vare;
        initVarePanels();
        try {
            vareTitel.setText(aktivVare.getTitel());
            vareBeskrivelse.setText(aktivVare.getBeskrivelse());
        } catch (RemoteException ex) {
            JOptionPane.showMessageDialog(this, "Der er opstået en fejl på forbindelsen mod serveren\n//setAktivVare", "Remote-Exception", 0);
        }
    }

    private void setVarekurvPanel() {
        vareKurvPanel.removeAll();
        try {
            SalgInterface aktivSalg = main.getConnectionInterface().getAktivSalg();
            if (aktivSalg != null) {

                ArrayList<VareSalgInterface> vareSalgsListe = aktivSalg.getVareSalgsListe();
                int yPos = 2;
                for (int i = 0; i < vareSalgsListe.size(); i++) {
                    VareKurvPanel varekurvPanel = new VareKurvPanel(vareSalgsListe.get(i), this);
                    vareKurvPanel.add(varekurvPanel);
                    varekurvPanel.setSize(280, 40);
                    varekurvPanel.setLocation(0, yPos);
                    varekurvPanel.setVisible(true);
                    yPos = yPos + 42;
                }
                vareKurvPanel.setPreferredSize(new Dimension(vareKurvPanel.getSize().width, yPos));
            
            }
        } catch (RemoteException ex) {
            JOptionPane.showMessageDialog(this, "Der er opstået en fejl på forbindelsen mod serveren", "Remote-Exception", 0);
        }

        vareKurvPanel.revalidate();
        vareKurvPanel.repaint();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        varegruppeCombo = new javax.swing.JComboBox();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        afgivBestillingKnap = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        grossistLagerpanel = new javax.swing.JPanel();
        jScrollPane2 = new javax.swing.JScrollPane();
        vareKurvPanel = new javax.swing.JPanel();
        jScrollPane3 = new javax.swing.JScrollPane();
        brugerLagerpanel = new javax.swing.JPanel();
        jLabel5 = new javax.swing.JLabel();
        bestillingsPanel = new javax.swing.JPanel();
        jScrollPane4 = new javax.swing.JScrollPane();
        vareBeskrivelse = new javax.swing.JTextArea();
        jLabel3 = new javax.swing.JLabel();
        avanceLabel = new javax.swing.JLabel();
        jLabel7 = new javax.swing.JLabel();
        bestilAntalTXT = new javax.swing.JTextField();
        tilføjTilKurvButton1 = new javax.swing.JButton();
        jLabel6 = new javax.swing.JLabel();
        vareTitel = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel8 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();

        setOpaque(false);
        addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentShown(java.awt.event.ComponentEvent evt) {
                formComponentShown(evt);
            }
        });
        setLayout(null);

        varegruppeCombo.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                varegruppeComboItemStateChanged(evt);
            }
        });
        add(varegruppeCombo);
        varegruppeCombo.setBounds(20, 40, 260, 30);

        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jLabel1.setForeground(new java.awt.Color(255, 255, 255));
        jLabel1.setText("Eget Lager");
        add(jLabel1);
        jLabel1.setBounds(300, 140, 101, 19);

        jLabel2.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jLabel2.setForeground(new java.awt.Color(255, 255, 255));
        jLabel2.setText("Gourmet Grossistens Lager");
        add(jLabel2);
        jLabel2.setBounds(20, 140, 200, 17);

        afgivBestillingKnap.setText("Afgiv Bestilling");
        afgivBestillingKnap.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                afgivBestillingKnapActionPerformed(evt);
            }
        });
        add(afgivBestillingKnap);
        afgivBestillingKnap.setBounds(860, 630, 270, 50);

        jScrollPane1.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

        grossistLagerpanel.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        grossistLagerpanel.setLayout(null);
        jScrollPane1.setViewportView(grossistLagerpanel);

        add(jScrollPane1);
        jScrollPane1.setBounds(20, 160, 260, 460);

        jScrollPane2.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

        javax.swing.GroupLayout vareKurvPanelLayout = new javax.swing.GroupLayout(vareKurvPanel);
        vareKurvPanel.setLayout(vareKurvPanelLayout);
        vareKurvPanelLayout.setHorizontalGroup(
            vareKurvPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 368, Short.MAX_VALUE)
        );
        vareKurvPanelLayout.setVerticalGroup(
            vareKurvPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 528, Short.MAX_VALUE)
        );

        jScrollPane2.setViewportView(vareKurvPanel);

        add(jScrollPane2);
        jScrollPane2.setBounds(860, 160, 270, 460);

        jScrollPane3.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

        brugerLagerpanel.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        brugerLagerpanel.setLayout(null);
        jScrollPane3.setViewportView(brugerLagerpanel);

        add(jScrollPane3);
        jScrollPane3.setBounds(300, 160, 260, 460);

        jLabel5.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jLabel5.setForeground(new java.awt.Color(255, 255, 255));
        jLabel5.setText("Søgefelt:");
        add(jLabel5);
        jLabel5.setBounds(20, 80, 170, 19);

        bestillingsPanel.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        bestillingsPanel.setOpaque(false);
        bestillingsPanel.setLayout(null);

        jScrollPane4.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        jScrollPane4.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);

        vareBeskrivelse.setColumns(20);
        vareBeskrivelse.setLineWrap(true);
        vareBeskrivelse.setRows(5);
        jScrollPane4.setViewportView(vareBeskrivelse);

        bestillingsPanel.add(jScrollPane4);
        jScrollPane4.setBounds(12, 300, 236, 147);

        jLabel3.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        jLabel3.setForeground(new java.awt.Color(255, 255, 255));
        jLabel3.setText("Din avance:");
        bestillingsPanel.add(jLabel3);
        jLabel3.setBounds(12, 215, 70, 20);

        avanceLabel.setForeground(new java.awt.Color(255, 255, 255));
        bestillingsPanel.add(avanceLabel);
        avanceLabel.setBounds(80, 215, 160, 20);

        jLabel7.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        jLabel7.setForeground(new java.awt.Color(255, 255, 255));
        jLabel7.setText("Bestil antal: ");
        bestillingsPanel.add(jLabel7);
        jLabel7.setBounds(20, 30, 90, 14);
        bestillingsPanel.add(bestilAntalTXT);
        bestilAntalTXT.setBounds(20, 50, 150, 30);

        tilføjTilKurvButton1.setText("Tilføj til kurv");
        tilføjTilKurvButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                tilføjTilKurvButton1ActionPerformed(evt);
            }
        });
        bestillingsPanel.add(tilføjTilKurvButton1);
        tilføjTilKurvButton1.setBounds(20, 90, 150, 30);

        jLabel6.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        jLabel6.setForeground(new java.awt.Color(255, 255, 255));
        jLabel6.setText("VareTitel: ");
        bestillingsPanel.add(jLabel6);
        jLabel6.setBounds(10, 180, 60, 20);

        vareTitel.setForeground(new java.awt.Color(255, 255, 255));
        vareTitel.setText("Ingen vare valgt");
        bestillingsPanel.add(vareTitel);
        vareTitel.setBounds(80, 180, 160, 20);

        add(bestillingsPanel);
        bestillingsPanel.setBounds(580, 160, 260, 460);

        jLabel4.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jLabel4.setForeground(new java.awt.Color(255, 255, 255));
        jLabel4.setText("Varekurv");
        add(jLabel4);
        jLabel4.setBounds(860, 140, 101, 19);

        jLabel8.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jLabel8.setForeground(new java.awt.Color(255, 255, 255));
        jLabel8.setText("Varegruppenavn:");
        add(jLabel8);
        jLabel8.setBounds(21, 11, 170, 19);

        jTextField1.setText("Skriv dit søgeord her:");
        jTextField1.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                jTextField1FocusGained(evt);
            }
        });
        jTextField1.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jTextField1KeyReleased(evt);
            }
        });
        add(jTextField1);
        jTextField1.setBounds(20, 100, 250, 30);
    }// </editor-fold>//GEN-END:initComponents

    private void afgivBestillingKnapActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_afgivBestillingKnapActionPerformed
        if (JOptionPane.showConfirmDialog(this, "Er du sikker på, at du vil afgive \ndin bestilling?") == 0) {
            try {
                main.getConnectionInterface().gennemførSalg();
                System.out.println("Salg bør være/blive gennemført nu...");
                setVarekurvPanel();
            } catch (RemoteException ex) {
                JOptionPane.showMessageDialog(this, "Der er opstået en fejl på forbindelsen mod serveren\nGennemførSalg blev ikke udført.", "Remote-Exception", 0);
            } catch (SQLException ex) {
                JOptionPane.showMessageDialog(this, "Der er opstået en fejl på serveren\nGennemførSalg blev ikke udført." + ex.getLocalizedMessage(), "SQL-Exception", 0);
            }
        }
    }//GEN-LAST:event_afgivBestillingKnapActionPerformed

    private void formComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentShown
        ArrayList<VareGruppeInterface> varegrupper = null;
        try {
            varegrupper = main.getConnectionInterface().hentAlleVaregrupper();
            varegruppeCombo.removeAllItems();
            varegruppeCombo.addItem("Ingen Varegruppe");
            for (VareGruppeInterface vareGruppeInterface : varegrupper) {
                varegruppeCombo.addItem(vareGruppeInterface.getGruppeNavn());
            } //
            initVarePanels();
            aktivSalg = main.getConnectionInterface().getAktivSalg();
            setVarekurvPanel();
        } catch (RemoteException ex) {
            JOptionPane.showMessageDialog(this, "Der er opstået en fejl på forbindelsen mod serveren", "Remote-Exception", 0);
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(this, "Der er opstået en fejl på serveren" + ex.getLocalizedMessage(), "SQL-Exception", 0);
        }
    }//GEN-LAST:event_formComponentShown

    private void varegruppeComboItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_varegruppeComboItemStateChanged
        initVarePanels();
        aktivVare = null;
    }//GEN-LAST:event_varegruppeComboItemStateChanged

    private void tilføjTilKurvButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tilføjTilKurvButton1ActionPerformed
        try {
            if (bestilAntalTXT.getText().matches("-?\\d+(\\.\\d+)?")) {
                aktivSalg.addVareSalg(aktivVare, Integer.parseInt(bestilAntalTXT.getText()));
                setVarekurvPanel();
            }
        } catch (RemoteException ex) {
            Logger.getLogger(VareBestillingsPanel.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(VareBestillingsPanel.class.getName()).log(Level.SEVERE, null, ex);
        }
    }//GEN-LAST:event_tilføjTilKurvButton1ActionPerformed

    private void jTextField1FocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextField1FocusGained
        jTextField1.selectAll();
    }//GEN-LAST:event_jTextField1FocusGained

    private void jTextField1KeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextField1KeyReleased
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            initVarePanels();
            System.out.println("Søgetekst: \""+jTextField1.getText()+"\"");
        }
    }//GEN-LAST:event_jTextField1KeyReleased


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton afgivBestillingKnap;
    private javax.swing.JLabel avanceLabel;
    private javax.swing.JTextField bestilAntalTXT;
    private javax.swing.JPanel bestillingsPanel;
    private javax.swing.JPanel brugerLagerpanel;
    private javax.swing.JPanel grossistLagerpanel;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JScrollPane jScrollPane4;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JButton tilføjTilKurvButton1;
    private javax.swing.JTextArea vareBeskrivelse;
    private javax.swing.JPanel vareKurvPanel;
    private javax.swing.JLabel vareTitel;
    private javax.swing.JComboBox varegruppeCombo;
    // End of variables declaration//GEN-END:variables
}
